$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

C++
C#

Баратање битовима

Подаци неозначених целобројних типова се у рачунару записују у бинарном запису, док се за означене целе бројеве користи потпуни комплемент. На пример, осмобитни записи из прве колоне могу да се тумаче као неозначени цели бројеви (unsigned char), из опсега 0..255, или као означени цели бројеви (char), из опсега -128..127.

запис вредност неозначеног броја вредност означеног броја 00000000 0 0 00000001 1 1 00000010 2 2 00000011 3 3 00000100 4 4 ... 01111110 126 126 01111111 127 127 10000000 128 -128 10000001 ... 11111110 254 -2 11111111 255 -1

Операције над битовима могу као аргументе да користе и означене и неозначене целобројне податке. У рачунарству је много чешћа и важнија употреба ових операција над неозначеним целобројним подацима, па ћемо у задацима из ове групе углавном да се бавимо неозначеним целим бројевима.

Целобројне константе могу у програмима да се запишу у бинарном систему, тако што се испред бинарног записа дода ознака 0b. На пример, записи 21 и 0b10101 су равноправни у програмима. Могућ је и запис у хексадекадном систему, тако што се испред хексадекадног записа дода ознака 0x. Тако је и 0x15 још један равноправан запис броја 21 (јер \(1 \cdot 16 + 5 = 21\)).

Над битовима целобројних података могу да се врше логичке битовне операције. Операција битовне конјункције се означава знаком &, битовна дисјункција знаком |, битовна негација знаком ~, а екслклузивна дисјункција знаком ^. Ове операције се изводе на свакој позицији истовремено и независно од осталих позиција. На пример, важи да је:

0b00111100 & 0b01010101 == 0b00010100 0b00111100 | 0b01010101 == 0b01111101 0b00111100 ^ 0b01010101 == 0b01101001 ~0b00111100 == 0b11000011

Последња једнакост важи под претпоставком да је резултат операције на левој страни осмобитан (у противном треба дописати одговарајући број водећих јединица).

Осим ових, логичких битовних операција, над битовима могу да се изводе и операције померања битова (енгл. shift) за дати број места улево или удесно. За померање улево се користи ознака <<, а за померање удесно ознака >>. На пример, важи да је:

0b00011010 >> 2 == 0b00000110 0b00011010 << 2 == 0b01101000

При овим операцијама помак мора да буде мањи од броја битова податка. Могуће је да се при померању неки битови и изгубе, на пример

0b00011010 >> 5 == 0b00000000

Постоји један важан специјалан случај померања битова, а то је померање бинарног записа јединице. На пример, ако је потребно \(k\)-ти бит броја \(a\) слева (бројећи од нуле) поставити на 1, то можемо да урадимо наредбом a = a | (1<<k)

pozicije k...210 a == aaaaaАaaaaaa 1<<k == 000001000000 ----------------------------- a | (1<<k) == aaaaa1aaaaaa

Слично томе, ако је потребно \(k\)-ти бит броја \(a\) слева (бројећи од нуле) поставити на 0, то можемо да урадимо наредбом a = a & ~(1<<k)

pozicije k...210 a == aaaaaАaaaaaa ~(1<<i) == 111110111111 ----------------------------- a & ~(1<<k) == aaaaa0aaaaaa

Померање јединице је важно и због тога што се помоћу њега може формирати бит-маска од \(k\) узастопних јединица, помоћу које може да се обрађује \(k\) узастопних позиција:

pozicije k...210 1 << k == 000001000000 (1 << k) - 1 == 000000111111

Kада желимо да издвојимо \(k\)-ти бит броја \(a\) слева (бројећи од нуле), можемо прво да померимо број \(a\) за \(k\) места удесно, а затим израчунамо конјункцију добијеног броја и јединице:

pozicije k...210 a == aaaaaАaaaaaa a >> k == 000000aaaaaА 1 == 000000000001 ----------------------------- (a>>k) & 1 == 00000000000A

Баратање битовима

Подаци неозначених целобројних типова се у рачунару записују у бинарном запису, док се за означене целе бројеве користи потпуни комплемент. На пример, осмобитни записи из прве колоне могу да се тумаче као неозначени цели бројеви (byte), из опсега 0..255, или као означени цели бројеви (sbyte), из опсега -128..127.

запис вредност неозначеног броја вредност означеног броја 00000000 0 0 00000001 1 1 00000010 2 2 00000011 3 3 00000100 4 4 ... 01111110 126 126 01111111 127 127 10000000 128 -128 10000001 ... 11111110 254 -2 11111111 255 -1

Операције над битовима могу као аргументе да користе и означене и неозначене целобројне податке. У рачунарству је много чешћа и важнија употреба ових операција над неозначеним целобројним подацима, па ћемо у задацима из ове групе углавном да се бавимо неозначеним целим бројевима.

Целобројне константе могу у програмима да се запишу у бинарном систему, тако што се испред бинарног записа дода ознака 0b. На пример, записи 21 и 0b10101 су равноправни у програмима. Могућ је и запис у хексадекадном систему, тако што се испред хексадекадног записа дода ознака 0x. Тако је и 0x15 још један равноправан запис броја 21 (јер \(1 \cdot 16 + 5 = 21\)).

Над битовима целобројних података могу да се врше логичке битовне операције. Операција битовне конјункције се означава знаком &, битовна дисјункција знаком |, битовна негација знаком ~, а екслклузивна дисјункција знаком ^. Ове операције се изводе на свакој позицији истовремено и независно од осталих позиција. На пример, важи да је:

0b00111100 & 0b01010101 == 0b00010100 0b00111100 | 0b01010101 == 0b01111101 0b00111100 ^ 0b01010101 == 0b01101001 ~0b00111100 == 0b11000011

Последња једнакост важи под претпоставком да је резултат операције на левој страни осмобитан (у противном треба дописати одговарајући број водећих јединица).

Осим ових, логичких битовних операција, над битовима могу да се изводе и операције померања битова (енгл. shift) за дати број места улево или удесно. За померање улево се користи ознака <<, а за померање удесно ознака >>. На пример, важи да је:

0b00011010 >> 2 == 0b00000110 0b00011010 << 2 == 0b01101000

При овим операцијама помак мора да буде мањи од броја битова податка. Могуће је да се при померању неки битови и изгубе, на пример

0b00011010 >> 5 == 0b00000000

Постоји један важан специјалан случај померања битова, а то је померање бинарног записа јединице. На пример, ако је потребно \(k\)-ти бит броја \(a\) слева (бројећи од нуле) поставити на 1, то можемо да урадимо наредбом a = a | (1<<k)

pozicije k...210 a == aaaaaАaaaaaa 1<<k == 000001000000 ----------------------------- a | (1<<k) == aaaaa1aaaaaa

Слично томе, ако је потребно \(k\)-ти бит броја \(a\) слева (бројећи од нуле) поставити на 0, то можемо да урадимо наредбом a = a & ~(1<<k)

pozicije k...210 a == aaaaaАaaaaaa ~(1<<i) == 111110111111 ----------------------------- a & ~(1<<k) == aaaaa0aaaaaa

Померање јединице је важно и због тога што се помоћу њега може формирати бит-маска од \(k\) узастопних јединица, помоћу које може да се обрађује \(k\) узастопних позиција:

pozicije k...210 1 << k == 000001000000 (1 << k) - 1 == 000000111111

Kада желимо да издвојимо \(k\)-ти бит броја \(a\) слева (бројећи од нуле), можемо прво да померимо број \(a\) за \(k\) места удесно, а затим израчунамо конјункцију добијеног броја и јединице:

pozicije k...210 a == aaaaaАaaaaaa a >> k == 000000aaaaaА 1 == 000000000001 ----------------------------- (a>>k) & 1 == 00000000000A

Баратање битовима — задаци

Бинарни и хексадекадни запис броја

За овај задатак можете видети решење
покушало: 56, решило: 80%

Припадност истој мрежи

За овај задатак можете видети решење
покушало: 75, решило: 97%

Представљање интернет адресе

За овај задатак можете видети решење
покушало: 53, решило: 88%

Упис групе битова

За овај задатак можете видети решење
покушало: 53, решило: 83%

Вредност групе битова

покушало: 35, решило: 91%

Постављање групе битова на 1

покушало: 37, решило: 94%

Брисање групе битова

покушало: 34, решило: 94%

Размена групе битова

покушало: 31, решило: 74%

Преузимање поште

покушало: 22, решило: 77%

Позиција бита

За овај задатак можете видети решење
покушало: 29, решило: 93%

Број јединица у бинарном запису

За овај задатак можете видети решење
покушало: 35, решило: 88%

Парност броја јединица у бинарном запису

За овај задатак можете видети решење
покушало: 50, решило: 98%

Број различитих битова

покушало: 26, решило: 96%

Битови у обрнутом поретку

За овај задатак можете видети решење
покушало: 51, решило: 92%

Биг ендиан

покушало: 20, решило: 95%

Ознака редоследа бајтова

покушало: 18, решило: 77%

Број UTF-8 симбола

покушало: 19, решило: 78%

Теме правоугаоника

За овај задатак можете видети решење
покушало: 22, решило: 95%

Већи чаробњак

За овај задатак можете видети решење
покушало: 42, решило: 95%

Пребројавање комбинације битова

За овај задатак можете видети решење
покушало: 24, решило: 95%

Најбројнији подскуп

покушало: 25, решило: 88%

Чешћи елементи

покушало: 7, решило: 85%

Путања

покушало: 7, решило: 85%

Топ

За овај задатак можете видети решење
покушало: 7, решило: 85%

Краљ битови

За овај задатак можете видети решење
покушало: 22, решило: 95%

Скакач битови

покушало: 4, решило: 75%

Ловац битови

покушало: 4, решило: 75%

Уклапање у узорак

За овај задатак можете видети решење
покушало: 7, решило: 85%

Периодичност

За овај задатак можете видети решење
покушало: 8, решило: 75%